package cn.psvmc.cxzapi.mapper.order;

import cn.psvmc.cxzapi.config.mybatisplus.mapper.MyBaseMapper;
import cn.psvmc.cxzapi.model.common.OrderBillEntity;
import cn.psvmc.cxzapi.model.common.OrderEntity;
import cn.psvmc.cxzapi.model.customer.TCustomer;
import cn.psvmc.cxzapi.model.customer.TCustomerAuth;
import cn.psvmc.cxzapi.model.order.TOrder;
import com.alipay.api.domain.GoodsDetail;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 订单表 Mapper 接口
 *
 * @Author auto
 * @Date 2024-08-12
 */
public interface TOrderMapper extends MyBaseMapper<TOrder> {
    //根据订单编号获取客户手机号
    TCustomer getPhoneByOrderCode(@Param("orderCode") String orderCode);

    //订单分配
    void setManager(@Param("orderId") Integer orderId, @Param("managerId") Integer managerId);

    //根据订单编号获取订单信息
    TOrder selectByOrderCode(@Param("orderCode") String orderCode);

    //订单列表
    IPage<Map<String, Object>> listAll(Page<TOrder> iPage, @Param("entity") OrderEntity entity);

    //逾期订单列表
    IPage<Map<String, Object>> listExpected(Page<TOrder> queryPage, @Param("entity") OrderEntity entity);

    //买断订单列表
    IPage<Map<String, Object>> listBuyout(Page<TOrder> queryPage, @Param("entity") OrderEntity entity);

    //我的订单列表
    IPage<Map<String, Object>> listMyOrder(Page<TOrder> queryPage, @Param("entity") OrderEntity entity);

    //客户查看订单详情
    Map<String, Object> findByIdForCustomer(@Param("entity") OrderBillEntity entity);

    //更新续租信息
    void updateRenewById(@Param("order") TOrder order);

    //首页-订单统计
    Map<String, Object> getAnalyze(@Param("storeId") Integer storeId, @Param("now") LocalDateTime now);

    //首页-续租率
    Double getRenewRate(@Param("entity") OrderEntity entity);

    //首页-收益走势
    List<Map<String, Object>> getEarningsTrend(@Param("entity") OrderEntity entity);

    //首页-订单走势
    List<Map<String, Object>> getOrderTrend(@Param("entity") OrderEntity entity);

    //更改订单状态为已发货
    void updateDeliveryStatus(@Param("codes") String codes);

    //获取风控报告
    String getControlReport(@Param("orderId") Integer orderId);

    //获取订单押金支付状态
    Integer getDepositStatus(@Param("orderId") Integer orderId);

    //更改订单状态
    void updateOrderStatusByCode(@Param("orderCode") String orderCode, @Param("orderStatus") int orderStatus);

    //订单导出列表
    List<Map<String, Object>> listExport(@Param("entity") OrderEntity entity);

    TOrder selectByCertifyId(@Param("certifyId") String certifyId);

    //获取订单认证信息
    Map<String, Object> getOrderAuth(@Param("entity") OrderBillEntity entity);

    //更新押金支付状态
    void updateDepositStatus(@Param("orderCode") String outOrderNo, @Param("depositStatus") int depositStatus
            , @Param("orderStatus") int orderStatus, @Param("authNo") String authNo);

    //获取订单服务信息
    Map<String, Object> getOrderService(@Param("orderId") Integer orderId);

    //获取商家服务信息
    Map<String, Object> getStoreService(@Param("storeid") Integer storeid);

    //获取订单编号
    String getCodeById(@Param("orderId") Integer orderId);

    //根据订单id获取订单详情
    Map<String, Object> findById(@Param("orderId") Integer orderId);

    //更新订单认证信息
    void updateCertify(@Param("order") TOrder order);

    //根据订单号获取订单id
    Integer getOrderIdByOrderCode(@Param("orderCode") String orderCode);

    //申请取消信息
    Map<String, Object> detailCancel(@Param("orderCode") String orderCode);

    //更新订单当前剩余冻结金额
    void updateRestAmountByCode(@Param("order") TOrder order);

    //归还详情
    Map detailReturn(@Param("orderCode") String orderCode);

    //获取订单当前剩余冻结金额
    TOrder getRestAmountByOrderId(@Param("orderId") Integer orderId);

    //根据订单号或id获取认证id
    TOrder getCertifyByIdOrCode(@Param("order") TCustomerAuth auth);

    //获取订单状态数量
    Map getStatusNum(@Param("entity") OrderEntity entity);

    //获取订单分配人
    List<Map> listManager(@Param("entity") OrderEntity entity);

    //订单任务更新订单状态
    void taskUpdateOrderStatus(@Param("order") TOrder tOrder);

    //获取客户订单状态数量
    Map getMyStatusNum(@Param("customerId") Integer customerId);

    //获取订单结算比例
    Double getSettlementRatio(@Param("orderId") Integer orderId);

    //获取订单状态
    Integer getOrderStatusById(@Param("orderId") Integer orderId);

    //根据订单号获取客户id
    Integer getCustomerIdByOrderId(@Param("orderId") Integer orderId);

    //更新租期
    void updateLeaseFixedById(@Param("order") TOrder updateOrder);

    //修改订单首次支付状态
    void updateFirstPayStatusById(@Param("orderId") Integer orderId, @Param("firstPayStatus") Integer firstPayStatus);

    //获取订单商品详情
    GoodsDetail getGoodsDetail(@Param("orderId") Integer orderId);

    //获取待处理订单（没有交易组件订单号或授权资金订单号）
    List<TOrder> listHandleOrder();

    //逾期订单导出列表
    List<Map<String, Object>> listExpected(@Param("entity") OrderEntity entity);

    //根据订单号获取商家id
    Integer getStoreIdByOrderCode(@Param("orderCode") String orderCode);
    
    //订单取消买断订单也取消
    void cancelBuyOutOrder(@Param("orderId") Integer orderId);

    //获取买断账单的原始订单id
    Integer getOrderPidByTradeNo(@Param("tradeNo") String tradeNo);

    //获取没有生成账单的买断订单
    List<TOrder> listNoBuyOutBill();

    //更新订单交易信息
    void updateTradeInfoByOrderId(@Param("order") TOrder order);

    //快捷下单成功详情
    Map<String, Object> detailOrderByCode(@Param("orderCode") String orderCode);

    //获取用户信息
    Map getUserInfo(@Param("orderCode") String orderCode);
}
